<?php
	final class EmailValidator extends MyDebuger implements MyData {
		/* version de la clase */
		private static $version			= 0;
		/* subversion de la clase */
		private static $subversion		= 1;
		/* numero de revision de la clase */
		private static $revision		= 5;
		/* autor de la clase */
		private static $author			= 'Hermann D. Schimpf';
		/* email de contacto con el autor */
		private static $authorAddress	= 'hschimpf@gschimpf.com';

		/* expresion regular para validar direcciones de email */
		private static $emailExpresion = '/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/i';

		public function __construct($debug = False, $name = __CLASS__) {
			/* creamos el padre */
			parent::__construct($debug, $name);
			/* habilitamos el registro en un fichero */
			$this->enableLog($name . '.log');
		}

		public static final function getVersion() {
			/* retornamos la version actual de la clase */
			return 'v' . self::$version . '.' . self::$subversion . '.' . self::$revision;
		}

		public static final function validateEmail($email = Null) {
			try {
				try {
					/* creamos la instancia */
					$validateEmail = new EmailValidator;
					/* mostramos un mensaje */
					$validateEmail->show('Verificando cadena de direccion email..', False);
					/* verificamos si ingreso algo */
					if ($email === Null)
						/* salimos con una excepcion */
						$validateEmail->newException('No se especifico la cadena a validar');
					/* verificamos que la cadena sea un string */
					if (gettype($email) != 'string')
						/* salimos con una excepcion */
						$validateEmail->newException('La cadena a validar debe ser un string');
					/* mostramos ok al mensaje */
					$validateEmail->showOK();
					/* mostramos la cadena a validar */
					$validateEmail->show('Validando direccion email ' . $validateEmail->italic($email) . '..', False);
					/* mostramos el resultado */
					$validateEmail->show(preg_match(self::$emailExpresion, $email) ? ' OK' : ' Invalid');
					/* retornamos si el email es valido */
					return (
						/* verificamos si es un email valido */
						preg_match(self::$emailExpresion, $email) ?
						/* retornamos true */
						True :
						/* retornamos false */
						False
					);
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$validateEmail->convertToMyException($e);
				}
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$validateEmail->show($e->getMensaje());
			}
		}
	}
?>